home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr28 / mxmnu239.zip / TMAX.MNU < prev    next >
Text File  |  1993-03-22  |  12KB  |  515 lines

  1. Comment
  2. ================================================
  3.  
  4. MarxMenu TaskMax Interface.
  5. Copyright 1992 by Marc Perkel * All Rights Reserved
  6. This menu requires DR-DOS 6.0 and TaskMax to run.
  7.  
  8. This example was designed to work with programs I have. It can be
  9. easilly reconfigured to work with your programs. It may be more
  10. elaborate than what you need.
  11.  
  12. To start this menu run MARXMENU TMAX.
  13.  
  14. This menu has many advantages over the default TaskMax menu. One is that
  15. it is much more flexable. Not only can you start a command line but you
  16. can start applications as well.
  17.  
  18. This menu also gives you the ability to preload tasks so that they are
  19. ready to be switched to. It also gives you the ability to set up timed
  20. execution; running a program and comming back to the menu automatically.
  21.  
  22. It can also allow you to manage the paste buffer. You can view it or
  23. pre-load it with anything you want. This menu can be modified to allow
  24. you to save paste buffers in a stack for later retrieval.
  25.  
  26. It also helps you retain your network security. The TaskMax menu only
  27. allows you to start a command line. Under MarxMenu you can restrict
  28. users from the command line and completely control the task switcher
  29. globally. Different users might have different menu options depending on
  30. what Novell groups they're in.
  31.  
  32. By using the screen blanker and automatic logoff features built into
  33. MarxMenu network security features are enhanced. The user can at any
  34. point switch to this menu and activate the screen blanker. The options
  35. in TMAX.INC can be set to require a password to unblank the screen.
  36.  
  37. ================================================
  38. EndComment
  39.  
  40.  
  41. Var
  42.   Tasks
  43.   NameList
  44.   ChoiceCount
  45.   UnLoad
  46.   MyTask
  47.   NukeMe
  48.   StatWin
  49.   FilePicked
  50.   LastTask
  51.   PickChoices
  52.  
  53. Qualifier
  54.   TaskName
  55.   TaskID
  56.  
  57. ;----- Get out if not running TaskMax
  58.  
  59. if not TMaxInstalled
  60.    StandardIO
  61.    Writeln
  62.    Writeln 'Requires DR-DOS TaskMax to Run!'
  63.    ExitMenu
  64. endif
  65.  
  66.  
  67. StatusLineText = '*-<< Acme Manufacturing Company >>-*'
  68. MenuTitle = "Joe Blow's Pop Up Menu"
  69.  
  70. Include 'TMAX.INC'
  71.  
  72. Setup
  73. Main
  74. ExitMenu
  75.  
  76. ;================================================
  77.  
  78. Procedure Select
  79. var Ch H P X Y W Indent MaxSingleColumn
  80.  
  81.    MaxSingleColumn = 5
  82.  
  83.    OnScreenOnly
  84.    BuildChoices
  85.    Status
  86.  
  87.    Explode Off
  88.    H = ChoiceCount
  89.    Indent = ''
  90.    W = 29
  91.    if ChoiceCount > MaxSingleColumn
  92.       H = ChoiceCount + 1 / 2
  93.       Indent = ' '
  94.       W = 32
  95.    endif
  96.    H = H + 8 + HeightDifference
  97.    if ChoiceCount = 0 then H = H - 1
  98.    DrawTheBox (5,(ScreenHeight - H) / 2 + 2,W,H,'MarxMenu TaskMax Menu')
  99.    Explode On
  100.    CapsColor(MenuCapColorFG,MenuBG)
  101.  
  102.    Loop Choices
  103.       if ChoiceCount > MaxSingleColumn
  104.          X = 1
  105.          if LoopIndex mod 2 = 0 then X = 14
  106.          Y = LoopIndex - 1 / 2 + 1
  107.          GotoXY X Y
  108.       endif
  109.       Writeln Choices[LoopIndex]
  110.    EndLoop
  111.    if ChoiceCount > 0
  112.       TextColor MenuVertLinesFG MenuBG
  113.       ClearLine '─'
  114.       Writeln
  115.       TextColor MenuInsideFG MenuBG
  116.       CapsColor(MenuCapColorFG,MenuBG)
  117.    endif
  118.  
  119.    if LastTask > TMaxMaxTasks then LastTask = 0
  120.    if ChoiceCount = 1 then LastTask = 1
  121.    if ChoiceCount = 0 then Suggest '1'
  122.    if LastTask > 0
  123.       Suggest Char(LastTask + 64)
  124.    endif
  125.  
  126.    Writeln Indent '  1 - New Command Line'
  127.    Writeln Indent '  2 - Directory Master'
  128.    Writeln Indent '  3 - Type in a Command'
  129.    Writeln Indent '  4 - TaskMax Control'
  130.    Writeln Indent '  5 - Delete a Task'
  131.    Writeln Indent '  6 - Applications'
  132.    Write   Indent '  U - Unload This Menu'
  133.  
  134.    Ch = ReadKey
  135.  
  136.    if (Ch >= 'A') and (Ch <= Char(ChoiceCount + 64))
  137.       SwitchTasks(Tasks[(ord(Ch) - 64)].TaskID)
  138.  
  139.    elseif Ch = '1'
  140.       if ExistOnPath('DOLIST.EXE') > ''
  141.          CreateTask('DOLIST.EXE')
  142.       else
  143.          CreateTask('COMMAND')
  144.       endif
  145.  
  146.    elseif Ch = '2'
  147.       P = PosInList('DM3',NameList)
  148.  
  149.       ;----- If DM3 is running the select it else start a new one
  150.  
  151.       if P = 0
  152.          CreateTask('DM3.EXE')
  153.       else
  154.          SwitchTasks(Tasks[P].TaskID)
  155.       endif
  156.  
  157.    elseif Ch = '3'
  158.       TypeACommand
  159.  
  160.    elseif Ch = '4'
  161.       SetOptions
  162.  
  163.    elseif Ch = '5'
  164.       KillTasks
  165.  
  166.    elseif Ch = '6'
  167.       Applications
  168.       EraseTopWindow
  169.  
  170.    elseif Ch = 'U'
  171.       Unload = True
  172.  
  173.    elseif Ch = ESC
  174.       if ChoiceCount = 0
  175.          Unload = True
  176.       else
  177.          if LastTask > 0
  178.             SwitchTasks(Tasks[LastTask].TaskID)
  179.          endif
  180.       endif
  181.  
  182.    endif
  183.    EraseTopWindow
  184. EndProc
  185.  
  186.  
  187. Procedure Main
  188.    while not Unload
  189.       Select
  190.    EndWhile
  191.    TMaxTakeOver Off
  192. EndProc
  193.  
  194.  
  195. Procedure TypeACommand
  196. var St
  197.    DrawBox 10 21 60 3
  198.    TextColor MenuHeaderFG MenuBG
  199.    Write ' Type Command: '
  200.    TextColor MenuInsideFG MenuBG
  201.    St = Readln
  202.    EraseTopWindow
  203.    if St > ''
  204.       CreateTask(St)
  205.    endif
  206. EndProc
  207.  
  208.  
  209. Procedure DrawPickTasksBox (Msg)
  210. var T
  211.    PickChoices = Choices
  212.    T = ScreenHeight - ChoiceCount / 2
  213.    DrawTheBox (29,T,19,ChoiceCount + HeightDifference,Msg)
  214.    Loop PickChoices
  215.       Trim(PickChoices[LoopIndex])
  216.    EndLoop
  217. EndProc
  218.  
  219.  
  220. Procedure KillTasks
  221. var Ch ID KillList T FileString Name
  222.    DrawPickTasksBox('Kill Tasks')
  223.    PickMany(PickChoices,KillList)
  224.    EraseTopWindow
  225.    Loop PickManyPositions
  226.       Name = Tasks[PickManyPositions[LoopIndex]].TaskName
  227.       ID = Tasks[PickManyPositions[LoopIndex]].TaskID
  228.       T = TMaxTaskOpenFiles(ID)
  229.       DrawBox 27 10 19 + length(Name) 3
  230.       TextColor MenuHeaderFG MenuBG
  231.       Write ' Deleting Task: '
  232.       TextColor MenuInsideFG MenuBG
  233.       Write Name
  234.       if T > 0
  235.          FileString = 'Files'
  236.          if T = 1 then FileString = 'File'
  237.          FileString = Str(T) + ' open ' + FileString
  238.          if AskYesNo ('Task has ' + FileString +'. Delete Anyway?')
  239.             TMaxDeleteTask(ID)
  240.          endif
  241.       else
  242.          Wait 250
  243.          TMaxDeleteTask(ID)
  244.       endif
  245.       EraseTopWindow
  246.    EndLoop
  247.    LastTask = 0
  248. EndProc
  249.  
  250.  
  251. Procedure CreateTask (Cmd)
  252.    TMaxCreateTask(Cmd)
  253.    LastTask = TMaxTaskIndex(TMaxResult);
  254. EndProc
  255.  
  256.  
  257. Procedure SwitchTasks (T)
  258.    TMaxSwitchTasks(T)
  259.  
  260.    ;TMaxSwitchTasks returns the TaskID of the last active task in TMaxResult
  261.  
  262.    LastTask = TMaxTaskIndex(TMaxResult);
  263. EndProc
  264.  
  265.  
  266. Procedure SwitchTaskByName (Name)
  267.    SwitchTasks(Tasks[PosInlist(Name,NameList)].TaskID)
  268. EndProc
  269.  
  270.  
  271. Procedure Setup
  272.  
  273.    TMaxTakeOver On
  274.    TMaxNameTask(TMaxThisTask,'TMAX')
  275.  
  276.    BuildChoices
  277.  
  278.    ;----- AutoLoad Tasks
  279.  
  280.    ;----- Only load DM3.EXE if not already loaded
  281.  
  282.    if (PosInList('DM3',NameList) = 0) and (ExistOnPath('DM3.EXE') > '')
  283.       TMaxReturnCount = 40
  284.       CreateTask('DM3.EXE')
  285.    endif
  286.  
  287.    ;----- Only load SideKick 2 if not already loaded
  288.  
  289.    if (PosInList('SK2',NameList) = 0) and ExistFile('H:\SK2\SKCONFIG.SKC')
  290.       TMaxReturnCount = 200
  291.       CreateTask('SK2.BAT')
  292.    endif
  293.  
  294.    TMaxReturnCount = 0
  295.    DrawTheBox (42,ScreenHeight / 2 - 2,32,HeightDifference + 4,'TaskMax Status')
  296.    StatWin = CurrentWindow
  297.  
  298. EndProc
  299.  
  300. ;----- Show Status Information
  301.  
  302. Procedure Status
  303.    SetTopWindow StatWin
  304.    TextColor MenuInsideFG MenuBG
  305.    Writeln '    Maximum Tasks: ' TMaxMaxTasks
  306.    Writeln '     Active Tasks: ' ChoiceCount ' '
  307.    Writeln ' EMS Memory Limit: ' TMaxEMSMemLim / 1024 'k   '
  308.    Write   '  Free Disk Space: ' FreeDiskSpace Path / 1000000 'm  '
  309.    if StatWin < CurrentWindow
  310.       SetWindowUnder (StatWin,StatWin + 1)
  311.    endif
  312. EndProc
  313.  
  314. ;----- This code reads the task list and processes the choices.
  315.  
  316. Procedure NewChoice (Num,St)
  317.    AppendArray(Choices,'  ' + Char(Num + 64) + ' - ' + St)
  318. EndProc
  319.  
  320.  
  321. Procedure BuildChoices
  322.    MyTask = TMaxThisTask
  323.    TMaxReadTaskInfo (Tasks)
  324.  
  325.    Dispose(Choices)
  326.    Dispose(NameList)
  327.    ChoiceCount = 0
  328.  
  329.    Loop Tasks
  330.       if Tasks[LoopIndex].TaskID = MyTask
  331.          NukeMe = LoopIndex
  332.       else
  333.          ChoiceCount = ChoiceCount + 1
  334.          NewChoice(ChoiceCount,Tasks[LoopIndex].TaskName)
  335.          AppendArray(NameList,Tasks[LoopIndex].TaskName)
  336.       endif
  337.    EndLoop
  338.  
  339.    ;don't show the task switcher task in the task list
  340.  
  341.    delete(Tasks,NukeMe,1)
  342. EndProc
  343.  
  344.  
  345. Procedure IsLoaded (Name)
  346.    Return PosInList(Name,NameList) > 0
  347. EndProc
  348.  
  349.  
  350. Procedure SetOptions
  351. var Ch St PB CurrentBuffer
  352.    DrawTheBox (23,ScreenHeight / 2 + 1,29,HeightDifference + 6,'TaskMax Options')
  353.    Writeln '  A - Direct Switching'
  354.    Writeln '  B - EMS Memory Limit'
  355.    Writeln '  C - Copy Data'
  356.    Writeln '  D - Paste Data'
  357.    Writeln '  E - View Paste Buffer'
  358.    Write   '  F - Paste my Address'
  359.  
  360.    While Ch <> Esc
  361.  
  362.       Ch = ReadKey
  363.  
  364.       if Ch = 'A'
  365.          TMaxDirectSwitching = AskYesNo('Allow use of Direct Switch Keys?')
  366.  
  367.  
  368.       elseif Ch = 'B'
  369.          DrawBox 25 22 31 3
  370.          TextColor MenuHeaderFG MenuBG
  371.          Write ' EMS Memory Limit (k): '
  372.          TextColor MenuInsideFG MenuBG
  373.          St = Readln
  374.          EraseTopWindow
  375.          TMaxEMSMemLim = Value(St) * 1024
  376.  
  377.       elseif Ch = 'C'
  378.          Cut
  379.  
  380.       elseif Ch = 'D'
  381.          Paste
  382.  
  383.       elseif Ch = 'E'
  384.          ViewPasteBuffer
  385.  
  386.       elseif Ch = 'F'
  387.          Dispose(PB)
  388.          AppendArray(PB,'Computer Tyme')
  389.          AppendArray(PB,'411 North Sherman Suite 300')
  390.          AppendArray(PB,'Springfield MO. 65802')
  391.          AppendArray(PB,'417-866-1222')
  392.  
  393.          ;save and restore current paste buffer
  394.  
  395.          TMaxGetPasteBuffer(CurrentBuffer)
  396.          TMaxSetPasteBuffer(PB)
  397.          Paste
  398.          TMaxSetPasteBuffer(CurrentBuffer)
  399.  
  400.       endif
  401.  
  402.    endwhile
  403.  
  404.    EraseTopWindow
  405. EndProc
  406.  
  407.  
  408. Procedure Cut
  409. var C
  410.    DrawPickTasksBox('Cut from Task')
  411.    C = PickOne(PickChoices)
  412.    EraseTopWindow
  413.    if PickPosition <> 0
  414.       TMaxCut(Tasks[PickPosition].TaskID)
  415.    endif
  416. EndProc
  417.  
  418.  
  419. Procedure Paste
  420. var C
  421.    DrawPickTasksBox('Paste to Task')
  422.    C = PickOne(PickChoices)
  423.    EraseTopWindow
  424.    if PickPosition <> 0
  425.       TMaxPaste(Tasks[PickPosition].TaskID)
  426.    endif
  427. EndProc
  428.  
  429.  
  430. Procedure ViewPasteBuffer
  431. var Paste
  432.    BoxHeader = ' Viewing Paste Buffer '
  433.    Shadow Off
  434.    DrawBox 1 4 ScreenWidth ScreenHeight - 4
  435.    TextColor MenuHeaderFG MenuBG
  436.    TMaxGetPasteBuffer(Paste)
  437.    ViewArray(Paste)
  438. EndProc
  439.  
  440.  
  441. ;----- Applications Menu
  442.  
  443. Procedure Applications
  444.  
  445.    Dispose Choices
  446.  
  447.    AddChoice('Pick Directory',1)
  448.    AddChoice('TapCIS',2)
  449.    AddChoice('Telemate',3)
  450.  
  451.    CenterStretchBox ('DOS Menu',38,15)
  452.  
  453.    LastKey = UpperCase(ReadKey)
  454.  
  455.    while True
  456.  
  457.       if LastKey = Task(1)
  458.          CreateTask('PD.EXE')
  459.          Return
  460.  
  461.       elseif LastKey = Task(2)
  462.  
  463.          ; only load TapCis once
  464.  
  465.          if IsLoaded('TAPCIS')
  466.             SwitchTaskByName('TAPCIS')
  467.          else
  468.             CreateTask('CIS')
  469.          endif
  470.          Return
  471.  
  472.       elseif LastKey = Task(3)
  473.  
  474.          ; only load Telemate once
  475.  
  476.          if IsLoaded('TM')
  477.             SwitchTaskByName('TM')
  478.          else
  479.             CreateTask('TM')
  480.          endif
  481.          Return
  482.  
  483.       elseif LastKey = Esc
  484.          Return
  485.  
  486.       endif
  487.  
  488.    EndWhile
  489.  
  490. EndProc
  491.  
  492.  
  493. Procedure AskYesNo (Question)
  494. var YesNo
  495.    DrawBox(34 - (Length(Question) / 2),21,Length(Question) + 14,3)
  496.    TextColor MenuHeaderFG MenuBG
  497.    UseArrows Off
  498.    Cursor On
  499.    Write ' ' Question ' (Y/N) '
  500.    YesNo = UpperCase(ReadKey)
  501.    YesNo = YesNo = 'Y'
  502.    TextColor MenuInsideFG MenuBG
  503.    if YesNo
  504.       Write 'Yes'
  505.    else
  506.       Write 'No'
  507.    endif
  508.    Wait 50
  509.    EraseTopWindow
  510.    UseArrows On
  511.    Return YesNo
  512. EndProc
  513.  
  514.  
  515.